package com.briup.day11;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateTest {
    public static void main(String[] args) {
        /*
         Java中能够描述日期、时间这些概念的类很多：
            1、java.util.Date，本质上使用的还是从1970年1月1日至今的毫秒数时间戳，
            并且其输出的时间字符串格式对于我们来说不够友好；
            如果要将其修改为比较格式化的内容，需要借助于SimpleDateFormat进行格式化
            在现在不建议使用java.util.Date描述日期和时间
            2、java.sql.Date，在使用时需要传入对应的时间，同时只能描述日期，无法描述时间
            3、LocalDate，用于描述当前时间的日期，同时无需创建对象，直接通过类名调用其内部的
            now()方法即可获取当前的日期，同时输出的日期格式较为友好，推荐使用
            4、LocalTime，用于描述当前时间--时分秒内容的日期类，
            5、LocalDateTime，用于描述获取当前日期时间的日期类，能包含当前的日期以及当前时间，
            信息较全，所以会频繁使用
         */
        // LocalDateTime
        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println(dateTime);
        // 可以对该对象进行格式化 DateTimeFormatter类，对时间进行标准化输出
        DateTimeFormatter pattern = DateTimeFormatter
                .ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(pattern.format(dateTime));

        // 通过该对象，计算、比较、获取年月日等内容
        System.out.println("当前日期在本年的第" + dateTime.getDayOfYear() + "天");
        // 对日期进行加减，如加了32周后的日期
        LocalDateTime dateTime2 = dateTime.plusWeeks(32);
        System.out.println(pattern.format(dateTime2));
        System.out.println(dateTime.isBefore(dateTime2));
    }

    private static void test() {
        Date date = new Date();
        System.out.println(date);
        System.out.println(date.getTime());
        // 借助于SimpleDateFormat类，指定日期输出的格式，将时间格式化输出
        /*
            yy --> 获取年份的后两位
            yyyy --> 获取所有年份
            mm --> 获取时间中的分钟数
            MM --> 获取日期中的月份
            ss --> 获取时间中的秒数
            HH --> 获取时间中24小时制的小时数
            hh --> 12小时制的小时数
            dd --> 获取日期中的天数
         */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(date));
        // System.currentTimeMillis()可以获取当前系统时间转换为的时间戳
        java.sql.Date date1 = new java.sql.Date(System.currentTimeMillis());
        System.out.println(date1);
        // 使用LocalDate.now()获取当前时间
        System.out.println(LocalDate.now());
        System.out.println(LocalTime.now());
    }
}
